﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaLogica.CL.Usuario;
using CapaLogica.CL.Grupo;
using CapaLogica.CL.Tema;


namespace CapaLogica.CL.Foro
{
    public class Cl_Foro
    {
        /// <summary>
        //
        /// </summary>
        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        private string _nombre;

        public string Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }
        private string _descripcion;

        public string Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }
        private Boolean _estado;

        public Boolean Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }


        private List<Cl_Usuario> _listaEstudiantes;
        //atributo de la lista de estudiantes que asocian a un curso
        public  List<Cl_Usuario> ListaEstudiantes
        {
            get { return _listaEstudiantes; }
            set { _listaEstudiantes = value; }
        }


        private int _idProfesor;

        public int IdProfesor
        {
            get { return _idProfesor; }
            set { _idProfesor = value; }
        }

        private int _idGrupo;

        public int IdGrupo
        {
            get { return _idGrupo; }
            set { _idGrupo = value; }
        }



        private CL_Grupo _grupo;

        public CL_Grupo Grupo
        {
            get 
            {
                try
                {
                    if (_grupo == null)
                    {
                        _grupo = new GrupoPersistente().buscarGrupoPorId(IdGrupo);
                    }
                    return _grupo;
                }
                catch (Exception)
                {
                    
                    throw;
                }
                 
            }
            set { _grupo = value; }
        }

        private Cl_Docente _profesor;

        public Cl_Docente Profesor
        {
            get
            {
                try
                {
                    if (_profesor == null)
                    {
                        Cl_Usuario temp = new UsuarioPersistente().buscarPorId(IdProfesor);
                        _profesor = new Cl_Docente(temp.Cedula, temp.Nombre, temp.PrimerApellido, temp.SegundoApellido, temp.Genero,
                                                    temp.FechaNacimineto, temp.Rol, temp.CorreoElectronico, temp.Contrasena);
                        _profesor.Id = temp.Id;
                    }
                    return _profesor;
                }
                catch (Exception)
                {
                    
                    throw;
                }
                 
            }
            set { _profesor = value; }
        }

        private List<Cl_Tema> _temas;

        public List<Cl_Tema> Temas
        {
            get 
            {
                try
                {
                    //if(_temas == null)
                    //{
                    //    _temas = new TemaPersistente().buscarTemasDeUnForo(Id);
                    //}
                    return _temas; 
                }
                catch (Exception)
                {
                    
                    throw;
                }
                
            }
            set { _temas = value; }
        }




        //Constructor vacío de la clase foro
        public Cl_Foro() { 
        
        }
        // cosntructor de la clase de foro
        public Cl_Foro(string pnombre, string pdescripcion, Boolean pestado, List<Cl_Usuario> plistaEstudiantes) {

            _nombre = pnombre;
            _descripcion = pdescripcion;
            _estado = pestado;
            _listaEstudiantes = plistaEstudiantes;
                 
        }




        /// <summary>
        /// Registrar un tema de un foro
        /// </summary>
        /// <param name="pNombre"></param>
        /// <param name="pDescripcion"></param>
        /// <param name="pFechaInicio"></param>
        /// <param name="pfechaFin"></param>
        /// <param name="pCalificacion"></param>
        /// <param name="pplistaEstudiantes"></param>
        public void registrarTema(string pNombre, string pDescripcion,  DateTime pfechaFinal,
                                            Boolean pcalificacion, List<int> plistaIdEstudiantes, 
                                            Boolean pConFecha, String pJustificacion, int pCantMaxAportes, int pIdUsuario)
        {
            try
            {
                Cl_Tema tema = new Cl_Tema(pNombre,  pfechaFinal, pDescripcion, true, pcalificacion, pJustificacion, pCantMaxAportes);
                tema.Justificacion = pJustificacion;
                TemaPersistente persisTema = new TemaPersistente();
                persisTema.registrarTemaPersistente(tema, plistaIdEstudiantes, Id, pConFecha, pIdUsuario);
              
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }
    }
}
